package rodrigosetti.colorstrike.estados;

import java.io.IOException;

import javax.microedition.lcdui.Graphics;
import javax.microedition.lcdui.Image;

import rodrigosetti.colorstrike.core.Constantes;
import rodrigosetti.colorstrike.fase.Bandeira;
import rodrigosetti.colorstrike.fase.Bloco;
import rodrigosetti.colorstrike.fase.Elemento;
import rodrigosetti.colorstrike.fase.Fase;
import rodrigosetti.colorstrike.fase.Heroi;
import rodrigosetti.colorstrike.fase.Informacao;
import rodrigosetti.colorstrike.fase.Inimigo;
import rodrigosetti.midpgame.Estado;
import rodrigosetti.midpgame.GameCore;

public class Fase3 extends Fase {

	public static int TAMANHO = 74;
	
	public static final String texto1[] = {"Enemies ahead!", "You're imune if", "in same color"};
	public static final String texto2[] = {"Change colors fast!"};
	public static final String texto3[] = {"Get ready for", "real trouble!"};
	public static final String texto4[] = {"Congratulations!", "unfortunatelly", "that's all!"};
	
	private Image fundo;
	
	public Estado getPai() {
		// TODO Auto-generated method stub
		return null;
	}

	public void inicializar() {
		GameCore.loading.inicializar(15);
		
		elementos = new Elemento[TAMANHO];

		/* Coloca heroi na posicao inicial */
		Heroi heroi = new Heroi(this, Constantes.BLOCO_X/2,-(Constantes.BLOCO_Y*3)-Constantes.HEROI_Y);	
		this.setHeroi(heroi,3);
		
		GameCore.loading.atualizar(); /* Atualiza loading */
		
		/* Criacao da fase */
		elementos[0] = new Bloco(this, 0, Constantes.BLOCO_Y*-3);
		elementos[1] = new Bloco(this, 0, Constantes.BLOCO_Y*-2);
		elementos[2] = new Bloco(this, 0, Constantes.BLOCO_Y*-1);
		elementos[3] = heroi;	
		
		GameCore.loading.atualizar(); /* Atualiza loading */
		
		elementos[4] = new Bloco(this, Constantes.BLOCO_X, Constantes.BLOCO_Y*-2);
		elementos[5] = new Bloco(this, Constantes.BLOCO_X, Constantes.BLOCO_Y*-1);
		elementos[6] = new Bloco(this, Constantes.BLOCO_X*2, Constantes.BLOCO_Y*-1);
		elementos[7] = new Bloco(this, Constantes.BLOCO_X*3, Constantes.BLOCO_Y*-1);
		elementos[8] = new Bloco(this, Constantes.BLOCO_X*4, Constantes.BLOCO_Y*-2);
		
		GameCore.loading.atualizar(); /* Atualiza loading */
		
		elementos[9] = new Bloco(this, Constantes.BLOCO_X*4, Constantes.BLOCO_Y*-1);
		elementos[10] = new Informacao(this, Constantes.BLOCO_X*5, Constantes.BLOCO_Y*-4, texto1);
		elementos[11] = new Inimigo(this, Constantes.BLOCO_X*5, Constantes.BLOCO_Y*-4, Constantes.RED);
		elementos[12] = new Bloco(this, Constantes.BLOCO_X*5, Constantes.BLOCO_Y*-3);
		elementos[13] = new Bloco(this, Constantes.BLOCO_X*5, Constantes.BLOCO_Y*-2);
		
		GameCore.loading.atualizar(); /* Atualiza loading */
		
		elementos[14] = new Bloco(this, Constantes.BLOCO_X*5, Constantes.BLOCO_Y*-1);
		elementos[15] = new Inimigo(this, Constantes.BLOCO_X*6, Constantes.BLOCO_Y*-5, Constantes.RED);
		elementos[16] = new Bloco(this, Constantes.BLOCO_X*6, Constantes.BLOCO_Y*-4);
		elementos[17] = new Bloco(this, Constantes.BLOCO_X*6, Constantes.BLOCO_Y*-3);
		elementos[18] = new Inimigo(this, Constantes.BLOCO_X*7, Constantes.BLOCO_Y*-5, Constantes.RED);
		elementos[19] = new Bloco(this, Constantes.BLOCO_X*7, Constantes.BLOCO_Y*-4);
		
		GameCore.loading.atualizar(); /* Atualiza loading */
		
		elementos[20] = new Bloco(this, Constantes.BLOCO_X*8, Constantes.BLOCO_Y*-4);
		elementos[21] = new Bloco(this, Constantes.BLOCO_X*9, Constantes.BLOCO_Y*-4);
		elementos[22] = new Inimigo(this, Constantes.BLOCO_X*10, Constantes.BLOCO_Y*-5, Constantes.GREEN);
		elementos[23] = new Bloco(this, Constantes.BLOCO_X*10, Constantes.BLOCO_Y*-4);
		elementos[24] = new Inimigo(this, Constantes.BLOCO_X*11, Constantes.BLOCO_Y*-6, Constantes.GREEN);
		elementos[25] = new Bloco(this, Constantes.BLOCO_X*11, Constantes.BLOCO_Y*-5);
		
		GameCore.loading.atualizar(); /* Atualiza loading */
		
		elementos[26] = new Bloco(this, Constantes.BLOCO_X*11, Constantes.BLOCO_Y*-4);
		elementos[27] = new Inimigo(this, Constantes.BLOCO_X*12, Constantes.BLOCO_Y*-5, Constantes.GREEN);
		elementos[28] = new Bloco(this, Constantes.BLOCO_X*12, Constantes.BLOCO_Y*-4);
		elementos[29] = new Informacao(this, Constantes.BLOCO_X*13, Constantes.BLOCO_Y*-5, texto2);
		elementos[30] = new Bloco(this, Constantes.BLOCO_X*13, Constantes.BLOCO_Y*-4);
		elementos[31] = new Bloco(this, Constantes.BLOCO_X*13, Constantes.BLOCO_Y*-3);
		elementos[32] = new Inimigo(this, Constantes.BLOCO_X*14, Constantes.BLOCO_Y*-5, Constantes.BLUE);
		
		GameCore.loading.atualizar(); /* Atualiza loading */
		
		elementos[33] = new Bloco(this, Constantes.BLOCO_X*14, Constantes.BLOCO_Y*-4);
		elementos[34] = new Inimigo(this, Constantes.BLOCO_X*15, Constantes.BLOCO_Y*-6, Constantes.BLUE, false);
		elementos[35] = new Bloco(this, Constantes.BLOCO_X*15, Constantes.BLOCO_Y*-5);
		elementos[36] = new Bloco(this, Constantes.BLOCO_X*15, Constantes.BLOCO_Y*-4);
		elementos[37] = new Bloco(this, Constantes.BLOCO_X*16, Constantes.BLOCO_Y*-4);
		elementos[38] = new Bloco(this, Constantes.BLOCO_X*17, Constantes.BLOCO_Y*-4);
				
		GameCore.loading.atualizar(); /* Atualiza loading */
		
		elementos[39] = new Bloco(this, Constantes.BLOCO_X*18, Constantes.BLOCO_Y*-4);
		elementos[40] = new Informacao(this, Constantes.BLOCO_X*19, Constantes.BLOCO_Y*-5, texto3);
		elementos[41] = new Bloco(this, Constantes.BLOCO_X*19, Constantes.BLOCO_Y*-4);
		elementos[42] = new Inimigo(this, Constantes.BLOCO_X*20, Constantes.BLOCO_Y*-5, Constantes.RED);
		elementos[43] = new Bloco(this, Constantes.BLOCO_X*20, Constantes.BLOCO_Y*-4);
		elementos[44] = new Inimigo(this, Constantes.BLOCO_X*20+Constantes.BLOCO_X/3, Constantes.BLOCO_Y*-5, Constantes.GREEN);
		
		GameCore.loading.atualizar(); /* Atualiza loading */
		
		elementos[45] = new Inimigo(this, Constantes.BLOCO_X*20+(Constantes.BLOCO_X*2/3), Constantes.BLOCO_Y*-5, Constantes.BLUE);
		elementos[46] = new Bloco(this, Constantes.BLOCO_X*21, Constantes.BLOCO_Y*-4);
		elementos[47] = new Bloco(this, Constantes.BLOCO_X*22, Constantes.BLOCO_Y*-5);
		elementos[48] = new Inimigo(this, Constantes.BLOCO_X*23, Constantes.BLOCO_Y*-6, Constantes.RED);
		elementos[49] = new Bloco(this, Constantes.BLOCO_X*23, Constantes.BLOCO_Y*-5, Bloco.PERMISSIVO, Constantes.GREEN);
		elementos[50] = new Inimigo(this, Constantes.BLOCO_X*24, Constantes.BLOCO_Y*-6, Constantes.RED);
		elementos[51] = new Bloco(this, Constantes.BLOCO_X*24, Constantes.BLOCO_Y*-5, Bloco.PERMISSIVO, Constantes.GREEN);
		
		GameCore.loading.atualizar(); /* Atualiza loading */
		
		elementos[52] = new Inimigo(this, Constantes.BLOCO_X*25, Constantes.BLOCO_Y*-6, Constantes.RED);
		elementos[53] = new Bloco(this, Constantes.BLOCO_X*25, Constantes.BLOCO_Y*-5, Bloco.PERMISSIVO, Constantes.GREEN);
		elementos[54] = new Bloco(this, Constantes.BLOCO_X*26, Constantes.BLOCO_Y*-5);
		elementos[55] = new Bloco(this, Constantes.BLOCO_X*27, Constantes.BLOCO_Y*-4);
		elementos[56] = new Bloco(this, Constantes.BLOCO_X*28, Constantes.BLOCO_Y*-4);
		elementos[57] = new Inimigo(this, Constantes.BLOCO_X*29, Constantes.BLOCO_Y*-7, Constantes.RED, false);
		elementos[58] = new Bloco(this, Constantes.BLOCO_X*29, Constantes.BLOCO_Y*-6, Bloco.OFENSIVO, Constantes.RED);
		
		GameCore.loading.atualizar(); /* Atualiza loading */
		
		elementos[59] = new Bloco(this, Constantes.BLOCO_X*29, Constantes.BLOCO_Y*-4);
		elementos[60] = new Inimigo(this, Constantes.BLOCO_X*30, Constantes.BLOCO_Y*-7, Constantes.RED, false);
		elementos[61] = new Bloco(this, Constantes.BLOCO_X*30, Constantes.BLOCO_Y*-6, Bloco.OFENSIVO, Constantes.RED);
		elementos[62] = new Inimigo(this, Constantes.BLOCO_X*30, Constantes.BLOCO_Y*-6, Constantes.GREEN);
		elementos[63] = new Bloco(this, Constantes.BLOCO_X*30, Constantes.BLOCO_Y*-4);
		elementos[64] = new Inimigo(this, Constantes.BLOCO_X*31, Constantes.BLOCO_Y*-7, Constantes.RED, false);
		
		GameCore.loading.atualizar(); /* Atualiza loading */
		
		elementos[65] = new Bloco(this, Constantes.BLOCO_X*31, Constantes.BLOCO_Y*-6, Bloco.OFENSIVO, Constantes.RED);
		elementos[66] = new Inimigo(this, Constantes.BLOCO_X*31, Constantes.BLOCO_Y*-6, Constantes.BLUE);
		elementos[67] = new Bloco(this, Constantes.BLOCO_X*31, Constantes.BLOCO_Y*-4);
		elementos[68] = new Bloco(this, Constantes.BLOCO_X*32, Constantes.BLOCO_Y*-4);
		elementos[69] = new Bloco(this, Constantes.BLOCO_X*33, Constantes.BLOCO_Y*-4);
		elementos[70] = new Informacao(this, Constantes.BLOCO_X*35, Constantes.BLOCO_Y*-6, texto4);
		
		GameCore.loading.atualizar(); /* Atualiza loading */
		
		elementos[71] = new Bloco(this, Constantes.BLOCO_X*35, Constantes.BLOCO_Y*-4);
		elementos[72] = new Bloco(this, Constantes.BLOCO_X*35, Constantes.BLOCO_Y*-3);
		elementos[73] = new Bandeira(this, Constantes.BLOCO_X*35+Constantes.BLOCO_X/2, Constantes.BLOCO_Y*-5);
		
		GameCore.loading.atualizar(); /* Atualiza loading */
		
		this.atrito = 0.3f;
		this.atritoAr = 0.9f;
		this.gravidade = 1.0f;
		this.nome = "Fase Tutorial";
		this.limiteQueda = Constantes.BLOCO_Y*5;
		
		try {
			fundo = Image.createImage("/sol.png");
		} catch (IOException e) {
			e.printStackTrace();
		}
		
		GameCore.loading.atualizar(); /* Atualiza loading */
		
		GameCore.loading.finalizar();
	}
	
	/**
	 * Desenha fase 1
	 */
	public void desenhar(Graphics g)
	{
		final int MOD = 2;
		/*limpa tela: */
	    g.setColor(0xB0FFFF);
	    g.fillRect(0, 0, GameCore.widthScreen, GameCore.heightScreen);
	    
	    /* Desenha efeito de fundo */
	    /* Conta numero de quadrados */
	    for (int i = -1; i < MOD+1; i++)
	    	for (int j = -1; j < MOD+1; j++)
	    	{
	    		
	    		//g.fillRect(
	    		g.drawImage(fundo,
	    				(GameCore.widthScreen*i/MOD)-(((int)(foco.x/2.0f))%(GameCore.widthScreen/MOD)),
	    				(GameCore.heightScreen*j/MOD)-(((int)(foco.y/2.0f))%(GameCore.heightScreen/MOD)),
//	    				(GameCore.widthScreen/MOD)-1, (GameCore.heightScreen/MOD)-1);
	    				0);
	    	}
	    
	    super.desenhar(g);
	}

}
